//
//  masterViewC.m
//  画线
//
//  Created by Kira on 16/2/15.
//  Copyright © 2016年 PumanHePuDa. All rights reserved.
//

#import "masterViewC.h"
#import "pathView.h"
#import <sqlite3.h>


#define DBNAME    @"personinfo.sqlite"
#define NAME      @"name"
#define AGE       @"age"
#define ADDRESS   @"address"
#define TABLENAME @"PERSONINFO"




@interface masterViewC ()
{
    sqlite3 * db;
}
@end

@implementation masterViewC

- (void)viewDidLoad {
    [super viewDidLoad];
    
    pathView * path = [[pathView alloc] init];
    self.view = path;
    
    /*
    sqlite 的方法
    sqlite3          *db, 数据库句柄，跟文件句柄FILE很类似
    sqlite3_stmt      *stmt, 这个相当于ODBC的Command对象，用于保存编译好的SQL语句
    sqlite3_open(),   打开数据库，没有数据库时创建。
    sqlite3_exec(),   执行非查询的sql语句
    Sqlite3_step(), 在调用sqlite3_prepare后，使用这个函数在记录集中移动。
    Sqlite3_close(), 关闭数据库文件
    还有一系列的函数，用于从记录集字段中获取数据，如
    sqlite3_column_text(), 取text类型的数据。
    sqlite3_column_blob（），取blob类型的数据
    sqlite3_column_int(), 取int类型的数据
     
     那么利用sqlite3_prepare_v2执行sql select语句，让后sqlite3_step遍历select执行的返回结果是一个非常方便的solution. 当然，你必须要明白
     sqlite3_prepare_v2不仅仅能够执行table的query selection，也能方便地进行sql Delete, Insert, Update等其他一些操作。它能帮你把sql语句
     的执行操作变的更加优雅。
     
     
    */
    
    NSString * documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
    NSString * dataBase_path = [documentsPath stringByAppendingPathComponent:DBNAME];
    
    
    if (sqlite3_open([dataBase_path UTF8String], &db) != SQLITE_OK) {
        sqlite3_close(db);
        NSLog(@"数据库打开失败");
    }else{
        NSLog(@"数据库打开成功");
    }
    
    NSString *sqlCreateTable = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)";
    [self execSql:sqlCreateTable];
    
    [self testInsertData]; //插入两条数据
    [self QueryData]; //查询打印数据
    
    //测试git功能，删除返回！！
    
    //测试分支上传代码
    //测试合并
}

-(void)execSql:(NSString *)sql
{
    char *err;
    // 执行非查询的sql语句
    if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
        sqlite3_close(db);
        NSLog(@"数据库操作数据失败!");
    }else{
        NSLog(@"数据库操作数据成功!");
    }
}


-(void)testInsertData{
    NSString *sql1 = [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                      TABLENAME, NAME, AGE, ADDRESS, @"张三", @"23", @"西城区"];
    NSString *sql2 = [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                      TABLENAME, NAME, AGE, ADDRESS, @"老六", @"20", @"东城区"];
    [self execSql:sql1];
    [self execSql:sql2];
}

-(void)QueryData{
    NSString *sqlQuery = @"SELECT * FROM PERSONINFO";
    sqlite3_stmt * statement;
    
    if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            
            //名字
            char *name = (char*)sqlite3_column_text(statement, 1);
            NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
            //年龄
            int age = sqlite3_column_int(statement, 2);
            //地址
            char *address = (char*)sqlite3_column_text(statement, 3);
            NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];
            NSLog(@"name:%@  age:%d  address:%@",nsNameStr,age, nsAddressStr);
        }
    }
    sqlite3_close(db);
}

@end
